package com.atues.first;

public class Main {
    public static void main(String[] args) {
        int a = 2;
//        //高位移出，低位补0
//        System.out.println("左移1位"+ (a << 1));
//        //低位移出，高位补0，相当于除以2^1
//        System.out.println("右移1位"+ (a >> 1));
//        //如果移动位数超过了int的位数，那么就会取模
        int b  = 42,c= 10;
        System.out.println("a左移b位"+ (a << b));
        System.out.println("c左移32位"+ (a << c));


        int  i = -1;
        System.out.println("初始数据：" + i);
        System.out.println("初始数据对应的二进制字符串长度：" + Integer.toBinaryString(i).length());
        //负数右移10
        i >>= 10;
        System.out.println("右移 10 位后的数据 " + i);
        System.out.println("右移 10 位后的数据对应的二进制字符：" + Integer.toBinaryString(i));


         i = -1;
        System.out.println("初始数据：" + i);
        System.out.println("初始数据对应的二进制字符串：" + Integer.toBinaryString(i));
        i <<= 10;
        System.out.println("左移 10 位后的数据 " + i);
        System.out.println("左移 10 位后的数据对应的二进制字符 " + Integer.toBinaryString(i));


        System.out.println("初始数据：" + i);
        System.out.println("初始数据对应的二进制字符串：" + Integer.toBinaryString(i) + "size:" + Integer.toBinaryString(i).length());
        i <<= 42;//先将-1左移42位，然后再将结果赋值给i
        System.out.println("左移 42 位后的数据 " + i);
        System.out.println("左移 42 位后的数据对应的二进制字符 " + Integer.toBinaryString(i) + "size:" + Integer.toBinaryString(i).length());

        //无符号运算
        i = -1;
        //
        System.out.println("初始数据：" + i);
        System.out.println("初始数据对应的二进制字符串：" + Integer.toBinaryString(i) + "size:" + Integer.toBinaryString(i).length());
        i >>>= 10;
        System.out.println("无符号右移 10 位后的数据 " + i);
        System.out.println("无符号右移 10 位后的数据对应的二进制字符 " + Integer.toBinaryString(i) + "size:" + Integer.toBinaryString(i).length());
    }
}
